﻿using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace HMS
{
    public partial class FRM_Taohosobenhnhan : DevExpress.XtraEditors.XtraForm
    {
        private SqlConnection con = new SqlConnection(FRM_Manhinhchinh.sConn);
        private DataTable dataTable;
        private SqlDataAdapter dataAp;
        private SqlCommand cmdUpdate, cmdInsert;
        public string sMaBenhnhan = ucDanhsachbenhnhan.sGetID;
        public string sMaBenhNhan;
        private bool bUpdate = ucDanhsachbenhnhan.bUpdate;
        public delegate void LoadGrid();

        public FRM_Taohosobenhnhan()
        {
            InitializeComponent();
            // LookUpEdit tỉnh/thành phố
            GetDataTable("select city_name, city_id from tblcity where city_id <> '001' and city_status = 'True'");
            LUETinhthanh.Properties.DataSource = dataTable;
            LUETinhthanh.Properties.DisplayMember = "city_name";
            LUETinhthanh.Properties.ValueMember = "city_id";

            if (bUpdate == true) Load_CapNhatButton();
            else Load_ThemMoiButton();
        }// end FRM_Taohosobenhnhan

        public void Tacvu(bool bUpdate)
        {
            //khai báo biến
            string sGioitinh = cmbGioitinh.Text;
            string sHoBN = txtHovatenlot.Text, sTenBN = txtTen.Text,
                        sNgay = txtNgay.Text, sThang = txtThang.Text, sNam = txtNam.Text,
                        sCMND = txtSoCMND.Text, sDiachi = txtDiachi.Text, sEmail = txtEmail.Text,
                        sSDT = txtSDT.Text, sNN = txtNghenghiep.Text, sMaBN = txtMabenhnhan.Text;
            switch (bUpdate)
            {
                    // Thêm mới thông tin bệnh nhân
                case false:
                    SqlConnection conInsert = new SqlConnection(FRM_Manhinhchinh.sConn);                    
                    if (emtyData() == false || Check_Nam() == true)
                    {
                        string sCity = LUETinhthanh.Properties.GetKeyValueByDisplayText(LUETinhthanh.Text).ToString();
                        string sDistrict = LUEQuanhuyen.Properties.GetKeyValueByDisplayText(LUEQuanhuyen.Text).ToString();
                        string sCmdInsert = "insert into tblPatient values('','',N'" + sTenBN + "',N'"
                        + sHoBN + "',N'" + sGioitinh + "','" + sCMND + "',N'" + sNN + "',N'"
                        + sDiachi + "','" + sEmail + "','" + sSDT + "','" + sCity + "','"
                        + sDistrict + "','" + sNgay + "','" + sThang + "','" + sNam + "')";
                        conInsert.Open();
                        cmdInsert = new SqlCommand(sCmdInsert, conInsert); // Cập nhật 
                        cmdInsert.ExecuteNonQuery(); // Thực thi lệnh SqlCommand
                        conInsert.Close(); // Đóng kết nối DB
                        MessageBox.Show("Tạo mới bệnh nhân thành công!", "Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                        this.DialogResult = DialogResult.OK;
                    }// end if
                    else MessageBox.Show("Vui lòng kiểm tra lại thông tin !","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                    break;

                    // Cập nhật thông tin bệnh nhân
                case true:
                    SqlConnection conUpdate = new SqlConnection(FRM_Manhinhchinh.sConn);

                    if (emtyData() == false || Check_Nam() == true)
                    {
                        string sCity = LUETinhthanh.Properties.GetKeyValueByDisplayText(LUETinhthanh.Text).ToString();
                        string sDistrict = LUEQuanhuyen.Properties.GetKeyValueByDisplayText(LUEQuanhuyen.Text).ToString();
                        string sCmdUpdate = "update tblPatient set Patient_FName = N'" + sTenBN + "', Patient_Lname = N'" +
                                         sHoBN + "', patient_gender = N'" + sGioitinh + "',Patient_Identity = '" + sCMND
                                        + "', Patient_Job = N'" + sNN + "',Patient_Address = N'" + sDiachi + "',Patient_Email ='" + sEmail
                                        + "',Patient_PhoneNumber = N'" + sSDT + "',City_ID = '" + sCity
                                        + "',District_ID = '" + sDistrict + "',Patient_Day = '" + sNgay + "',Patient_Month = '" + sThang
                                        + "',Patient_Year = '" + sNam + "'  where Patient_ID = '" + sMaBN + "'";
                        conUpdate.Open();
                        cmdUpdate = new SqlCommand(sCmdUpdate, conUpdate); // Cập nhật 
                        cmdUpdate.ExecuteNonQuery(); // Thực thi lệnh SqlCommand
                        conUpdate.Close(); // Đóng kết nối DB
                        MessageBox.Show("Cập nhật bệnh nhân thành công !", "Thông Báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                        this.DialogResult = DialogResult.OK;
                    }// end if
                    else MessageBox.Show("Vui lòng kiểm tra lại thông tin !","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    break;
            }// end switch
        }// end Tacvu

        // Event click cho nút Lưu và tạo phiếu khám
        private void btnLuuvataophieukham_Click(object sender, EventArgs e)
        {
            if (bUpdate == true) Tacvu(true);
            else Tacvu(false);
            if (emtyData() == false || Check_Nam() == true)
            {
                this.Close();
                FRM_Taophieukham frm = new FRM_Taophieukham();
                frm.ShowDialog();
                sMaBenhNhan = txtMabenhnhan.Text;
            }// end if
            else return;
        }// end btnLuuvataophieukham_Click

        // Event click cho nút Lưu và thoát
        private void btnLuuvathoat_Click(object sender, EventArgs e)
        {
            if (bUpdate == true) Tacvu(true);
            else Tacvu(false);
            if (emtyData() == false || Check_Nam() == true) this.Close();
            else return;
        }// end btnLuuvathoat_Click

        // Event click cho nút Hủy
        private void btnHuy_Click(object sender, EventArgs e)
        {
            DialogResult reusult = MessageBox.Show("Bạn có chắc chắn muốn thoát?",
                "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (reusult == DialogResult.Yes) this.Close();
            else return;
        }// end btnHuy_Click

        public DataTable GetDataTable(string sql)
        {
            // Tạo dataApdapter, thực hiện câu lệnh query
            dataAp = new SqlDataAdapter(sql, con);
            // Đổ dữ liệu vào DataTable
            dataTable = new DataTable();
            dataAp.Fill(dataTable);
            return dataTable;
        }// end GetDataTable

        // Mã tự động tăng hiện trên textbox
        private string NextID()
        {
            GetDataTable("select max(patient_id) as patient_id from tblpatient");
            string sMa = dataTable.Rows[0]["patient_id"].ToString();
            string sYear = DateTime.Now.Year.ToString().Remove(0,2);
            if (sMa == "") return "A" + sYear + "0000001";
            else
            {
                int iMaND = int.Parse(sMa.Remove(0, 3)) + 1;
                int lengthNumerID = sMa.Length - 3;
                string zeroNumber = "";
                for (int i = 1; i <= lengthNumerID; i++)
                    if (iMaND < Math.Pow(10, i))
                    {
                        for (int j = 1; j <= lengthNumerID - i; i++)
                            zeroNumber += "0";
                        return "A" + sYear + zeroNumber + iMaND.ToString();
                    }// end if
                return "A" + sYear + iMaND;
            }// end else
        }// end NextID()
        
        // Kiểm tra thông tin nhập vào trống
        private bool emtyData()
        {
            if (txtHovatenlot.Text == "" || txtTen.Text == "" ||
                cmbGioitinh.Text == "" || txtSoCMND.Text == "" ||
                txtDiachi.Text == "" || LUEQuanhuyen.Text == "" ||
                LUETinhthanh.Text == "" || txtNam.Text == "")
                return true;
            else return false;
        }//end emtyData

        // Kiểm tra năm
        private bool Check_Nam()
        {
            if (txtNam.Text == "") return false;
            else
            {
                int iNam = int.Parse(txtNam.Text);
                int iLenght = txtNam.Text.Length;
                if ((iLenght != 4) || iNam > DateTime.Now.Year)
                    return false;
                return true;
            }// end else
        }// end Check_Name

        // Gán dữ liệu lên giao diện Cập nhật
        private void Load_CapNhatButton()
        {
            SqlConnection conn = new SqlConnection(FRM_Manhinhchinh.sConn);
            // Gán dữ liệu lên giao diện
            GetDataTable("select * from tblPatient where Patient_ID = '" + sMaBenhnhan + "'");
            txtMabenhnhan.Text = dataTable.Rows[0]["Patient_ID"].ToString();
            txtHovatenlot.Text = dataTable.Rows[0]["Patient_LName"].ToString();
            txtTen.Text = dataTable.Rows[0]["Patient_FName"].ToString();
            txtNgay.Text = dataTable.Rows[0]["Patient_Day"].ToString();
            txtThang.Text = dataTable.Rows[0]["Patient_Month"].ToString();
            txtNam.Text = dataTable.Rows[0]["Patient_Year"].ToString();
            txtSoCMND.Text = dataTable.Rows[0]["Patient_Identity"].ToString();
            txtNghenghiep.Text = dataTable.Rows[0]["Patient_Job"].ToString();
            txtSDT.Text = dataTable.Rows[0]["Patient_PhoneNumber"].ToString();
            txtEmail.Text = dataTable.Rows[0]["Patient_Email"].ToString();
            txtDiachi.Text = dataTable.Rows[0]["Patient_Address"].ToString();
            cmbGioitinh.Text = dataTable.Rows[0]["Patient_Gender"].ToString();
            LUETinhthanh.EditValue = dataTable.Rows[0]["city_id"].ToString();
            LUEQuanhuyen.EditValue = dataTable.Rows[0]["district_id"].ToString();

            // Gán dữ liệu LUEQuanhuyen sau khi LUETinhthanh được set
            GetDataTable("select district_id, district_name from tbldistrict where city_id = '" 
                + dataTable.Rows[0]["city_id"].ToString() + "' and district_status = 'True'");
            LUEQuanhuyen.Properties.DataSource = dataTable;
            LUEQuanhuyen.Properties.DisplayMember = "district_name";
            LUEQuanhuyen.Properties.ValueMember = "district_id";
        }// end Load_CapNhatButton

        // Clear nội dung trên giao diện Thêm mới
        private void Load_ThemMoiButton()
        {
            txtMabenhnhan.Text = NextID();
            txtHovatenlot.Text = txtNgay.Text = txtTen.Text = txtThang.Text = txtNam.Text = txtSoCMND.Text = txtNghenghiep.Text
                = txtSDT.Text = txtEmail.Text = txtDiachi.Text = cmbGioitinh.Text 
                = LUETinhthanh.Properties.NullText = LUEQuanhuyen.Properties.NullText = "";
        }// end Load_ThemMoiButton

        // Event LookUpEdit đóng
        private void LUETinhthanh_Closed(object sender, DevExpress.XtraEditors.Controls.ClosedEventArgs e)
        {
            try
            {
                string sCityID = LUETinhthanh.Properties.GetKeyValueByDisplayText(LUETinhthanh.Text).ToString();
                string sSQL = "select district_id, district_name from tbldistrict where city_id = '" 
                    + sCityID + "' and district_status = 'True'";
                GetDataTable(sSQL);
                // LookUpEdit quận/huyện
                LUEQuanhuyen.Properties.DataSource = dataTable;
                LUEQuanhuyen.Properties.DisplayMember = "district_name";
                LUEQuanhuyen.Properties.ValueMember = "district_id";
            }// end try
            catch { }
        }// end LUETinhthanh_Closed

        private void txtNgay_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)) e.Handled = true;
        }

        private void txtThang_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)) e.Handled = true;
        }

        private void txtNam_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)) e.Handled = true;
        }

        private void txtSDT_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)) e.Handled = true;
        }

        private void txtSoCMND_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)) e.Handled = true;
        }

        private void LUETinhthanh_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Tab || e.KeyData == Keys.Enter)
                LUETinhthanh_Closed(null, null);
        }// end LUETinhthanh_KeyDown

        // Kiểm tra email đúng định dạng
        private bool Check_Email()
        {
            string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}"
                + @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\"
                + @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
            Regex re = new Regex(strRegex);
            if (re.IsMatch(txtEmail.Text)) return true;
            else return false;
        }// end Check_Email

        private void txtEmail_TextChanged(object sender, EventArgs e)
        {
            if (Check_Email() == false)
            {
                Control ctrl = (Control)txtEmail;
                errorEmail.SetError(ctrl, "Email không đúng định dạng !\nVD: admin@vanlanguni.vn");
            }// end if
            else errorEmail.Clear();
        }

        private void LUETinhthanh_TextChanged(object sender, EventArgs e)
        {
            LUETinhthanh_Closed(null, null);
        }// end LUETinhthanh_TextChanged
    }// end class
}// end namespace